const express = require('express')
const app = express()
const port = 3000
const ejs = require('ejs')
const bodyParser = require('body-parser')
const cookieParser = require('cookie-parser')
const session = require('express-session')

const MongoStore = require('connect-mongo')
const { MongoClient } = require('mongodb')
const url = 'mongodb://127.0.0.1:27017'

// 链接数据库
MongoClient.connect(url, (err, client) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('连接成功')
  let db = client.db('xiaosong')
  db.collection('sessions')
    .find()
    .toArray((err, res) => {
      // console.log(res)
    })
})

// 配置模板引擎
app.engine('html', ejs.__express)
app.set('view engine', 'html')

// 配置静态 web目录
app.use(express.static('static'))

// 配置第三方中间件
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

// 配置cookies
app.use(cookieParser())

// 配置 session
app.use(
  session({
    secret: 'this is session', // 服务端生成 session 签名
    resave: false, // 强制保存 session 即使它没有变化
    name: 'username',
    saveUninitialized: true, //强制将未初始化的 session 存储
    cookie: {
      secure: false, // true b标识只有https协议才能访问cookie
      maxAge: 1000 * 60 * 30,
    },
    rolling: true, // 每次请求的时候强行设置cookie，这里将重置 cookie 过期时间
    store: MongoStore.create({
      mongoUrl: 'mongodb://127.0.0.1:27017/xiaosong',
      // mongoOptions: advancedOptions, // See below for details
      touchAfter: 24 * 3600, // 不管发出多少请求，24小时
    }),
  })
)
//引入 route 模块
const login = require('./routes/login.js')
app.use('/login', login)


//应用级中间件
app.use((req, res, next) => {
  console.log(new Date())
  next()
})

app.get('/', (req, res) => {
  // 设置cookie
  // res.cookie('username', 'xiaobu', {
  //   maxAge: 1000 * 60 * 60, //过期时间
  //   // path:"/article"  // 固定页面可使用cookie
  //   // domain:".xxx.com" //多域名访问cookie
  // })
  // req.session.username = '小宋'
  res.send('Hello World!!!!')
})

// app.get('/article', (req, res) => {
//   // 获取cookie
//   let username = req.cookies.username
//   console.log('cookie', username)

//   if (req.session.username) {
//     res.send(req.session.username)
//     // console.log(req.session.username)
//   } else {
//     res.send('新闻')
//   }
// })

// app.get('/login', (req, res) => {
//   res.render('login', {})
// })

// app.post('/doLogin', (req, res) => {
//   const body = req.body
//   console.log(body)
//   res.send('提交')
// })

app.listen(port, () => console.log(`Example app listening on port port!`))
